package com.jzo2o.customer.service.impl;

import com.jzo2o.common.utils.BeanUtils;
import com.jzo2o.customer.model.domain.BankAccount;
import com.jzo2o.customer.mapper.BankAccountMapper;
import com.jzo2o.customer.model.dto.request.BankAccountUpsertReqDTO;
import com.jzo2o.customer.service.IBankAccountService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;

/**
 * <p>
 * 银行账户 服务实现类
 * </p>
 *
 * @author itcast
 * @since 2025-03-05
 */
@Service
public class BankAccountServiceImpl extends ServiceImpl<BankAccountMapper, BankAccount> implements IBankAccountService {

    /**
     * 插入或更新银行账户信息
     *
     * 此方法用于处理银行账户的插入或更新请求它首先将请求数据转换为BankAccount对象，
     * 然后使用继承的saveOrUpdate方法来保存或更新数据库中的对应记录
     *
     * @param bankAccountUpsertReqDTO 包含要插入或更新的银行账户信息的请求DTO
     */
    @Override
    @Transactional
    public void upsert(BankAccountUpsertReqDTO bankAccountUpsertReqDTO) {
        // 将请求DTO转换为BankAccount实体类对象
        BankAccount bankAccount = BeanUtils.toBean(bankAccountUpsertReqDTO, BankAccount.class);
        // 调用父类的saveOrUpdate方法，根据数据库中是否存在相同主键的数据来进行插入或更新操作
        if (bankAccount.getId() == null) {
            super.save(bankAccount);  // 插入
        } else {
            bankAccount.setUpdateTime(LocalDateTime.now()); // 手动填充
            super.updateById(bankAccount); // 更新
        }

    }
}
